#pragma once
#include "Drawable.h"
#include "Pathogen.h"
//#include "Manifestation.h" (Abstracted through Pathogen.h)
//#include "Global.h"	(Abstracted through multiple)
//#include <vector.h>   (Abstracted through Global.h)
//Using Namespace Std;	(Abstracted through Global.h)


class Zone : public Drawable
{
private:

	string  m_sName;			//Name for printout purposes
	int		m_eiCountryID;		//The name for enumerating purposes.
	bool	m_bInfected;		//Returns true if the country is infected
	bool	m_bSuccumbed;		//Returns true if the country is 100% infected
	bool    m_bForsaken;		//Returns true if the country is defeated

	int		m_iMilitantMight;	//Military power (# Infected killed per round
	int		m_iScienceMight;	//Scientific might(Speed Quarantine is made)	
	int		m_iaAfrThreshes [AFFAIR_SIZE];		//The thresholds which must be broken for affairs to be put into effect
	bool	m_ebaAffairs	[AFFAIR_SIZE];		//Affairs:		Reaction to the spread of the pathogen.
	bool	m_ebaServices	[SERVICE_SIZE];		//Services:		People's methods of travel
	bool	m_ebaAfflictions[AFFLICT_SIZE];		//Afflictions:	Random events caused by you or nature
	bool	m_bInfectables	[ZONE_SIZE];		//Who we are allowed to infect.

	int		m_iPopStart;		//Original number to compare against
	int		m_iPopHealthy;		//How many people aren't infected
	int		m_iPopInfected;		//How many people are infected
	int		m_iPopDead;			//How many people are dead
	int		m_iPopTotal;		//The total number of living citizens

public:

	//=====CONSTRUCTORS
	Zone();
	Zone(int, int, float, float, float, float);
	
	//=====MUTATORS
	void UpdateOutputText(string&);
	//=====UPDATE
	void Update(int&,int&,int&);
	void LocalSpread();
	void GlobalSpread();	
	void React();
	void ChooseReaction();
	void ChangeZoneColor();
	void FlattenValues();
	//=====ACCESSORS
	int		GetID()			{return m_eiCountryID;};	
	bool	isInfected()	{return m_bInfected	 ;};	
	bool	isDefeated()	{return m_bForsaken  ;};
	string	GetName()		{return m_sName		 ;};
	//=====MUTATORS
	void BecomeInfected()	{m_bInfected = true  ;};
};
typedef vector<Zone*> L_Zone;
